package string;

import java.util.SortedMap;

/**
 *
 */
public class StringDemo {
    public static void main(String[] args) {
        String s1="123abc";//字面量创建的字符串第一次使用时会缓存在常量池中
        String s2="123abc";//重用s1对象(重用常量池中“123abc”对象)
        System.out.println(s1==s2);//true，s1和s2为引用类型变量，保存的是地址，此时地址相同
        String s3="123abc";//依然复用
        System.out.println(s3==s1);
        String s4 = new String("123abc");//new一定创建新对象，不推荐这样创建字符串
        System.out.println(s4==s1);

        s1=s1+"！";//字符串是不变对象，修改内容坏创建新的对象
        System.out.println(s1==s2);//地址不同意味着不在指向同一个对象
        String s5="123"+"abc";//触发预计算特性，直接编译为String s5="123abc",JVM会复用该对象
        System.out.println(s5==s2);

        String s = "123";//字面量创建的字符串第一次
        String s6=s+"abc";//这里编译器不做操作，拼接字符串会产生新对象
        System.out.println(s6==s2);

        String s7="123abc";
        String s8 = new String("123abc");
        System.out.println(s7==s8);//是比较地址，因为地址不同所以false
        System.out.println(s7.equals(s8));//equals()是比较内容相同
    }
}

